package com.hw.one.dam2.util;

import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 数学计算的工具类
 * 
 * @author alicke
 *
 */
public class MathCalculateUtil {
	// 首先获得日志记录这个对象
	private static Logger logger = LoggerFactory.getLogger(MathCalculateUtil.class);

	/**
	 * 保留 1 位小数的格式化类
	 */
	public static DecimalFormat DOUBLE_1_SCALE_FORMAT = new DecimalFormat("#0.0");
	
	/**
	 * 保留 2 位小数的格式化类
	 */
	public static DecimalFormat DOUBLE_2_SCALE_FORMAT = new DecimalFormat("#0.00");
	
	/**
	 * 保留 3 位小数的格式化类
	 */
	public static DecimalFormat DOUBLE_3_SCALE_FORMAT = new DecimalFormat("#0.000");
	
	/**
	 * 用取余运算，判断数字是否是偶数
	 * 
	 * 一个整数，不是偶数，就是奇数，0按照规定，作为偶数使用
	 * 
	 * @param num
	 * @return
	 */
	public static boolean isEven(int num) {
		if (num % 2 == 0) {
			logger.debug("传入的整数 " + num + " 是偶数。");
			return true;
		} else {
			logger.debug("传入的整数 " + num + " 是奇数。");
			return false;
		}
	}

	/**
	 * 根据正则表达式，判断传入的字符串是否是数字，包含：整数和小数
	 * 
	 * @param str
	 * @return
	 */
	public static boolean isNumeric(String str) {
		Pattern pattern = Pattern.compile("^[-+]?\\d+(\\.\\d+)?$");
		Matcher isNum = pattern.matcher(str);
		if (!isNum.matches()) {
			logger.debug("传入的字符串 " + str + " 不是数字。");
			return false;
		}
		logger.debug("传入的字符串 " + str + " 是数字。");
		return true;
	}

	/**
	 * 判断传入字符串是否是整数
	 * 
	 * @param str
	 * @return
	 */
	public static boolean isInteger(String str) {
		Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
		Matcher isInt = pattern.matcher(str);
		if (isInt.matches()) {
			logger.debug("传入的字符串 " + str + " 是整数。");
			return true;
		}
		logger.debug("传入的字符串 " + str + " 不是整数。");
		return false;
	}


	/**
	 * 根据小数位，返回一个单位的double数据 例如：2位小数时，返回0.01;
	 * 
	 * @param scale
	 * @return
	 */
	public static String getScale1Double(int scale) {
		if (scale <= 0) {
			return "0.0";
		}

		StringBuffer sb = new StringBuffer();
		sb.append("0.");
		for (int i = 0; i < scale; i++) {
			if (i + 1 == scale) {
				sb.append("1");
				continue;
			}
			sb.append("0");
		}
		
		logger.debug("小数位为" + scale + "的单位数据为" + sb.toString());
		return sb.toString();
	}
}
